﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaBCL;
using ForrajeriaDB;


namespace ForrajeriaFRONT.ABM
{
    public partial class Usuarios : System.Web.UI.Page
    {
        UsuarioBCL objBC;
        ClienteMO objCliEditar;
        EmpleadoMO objEmpEditar;
        static string tipoBus;
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {
                TipoDocumentoBCL objDoc = new TipoDocumentoBCL();
                List<TipoDocumentoMO> listaDoc = new List<TipoDocumentoMO>();
                listaDoc = objDoc.GetAll();
                cmbTipoDoc.Items.Add(new ListItem("","0"));
                foreach(TipoDocumentoMO aux in listaDoc)
                {
                    cmbTipoDoc.Items.Add(new ListItem(aux.TipoDocumento1,aux.Codigo.ToString()));
                    
                }
                cmbTipoDoc.DataBind();
            }
            if (!Context.User.IsInRole("ADMIN"))
            {
                lblseleccione.Visible = false;
                rbEmpleado.Visible = false;
                rbCliente.Visible = false;
                btnBorrar.Visible = false;
                reqEmpCli.Text = "Debe Seleccionar un Cliente";
                chkAdmin.Visible = false;
                chkStock.Visible = false;
                chkVentas.Visible = false;
                btnBuscarUser.Visible = false;
                lbldatosCliEmp.Text = "Datos Cliente";
            }
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            CleanControl(this.Controls);

            if (!Context.User.IsInRole("ADMIN"))
            {
                cargarListaCliente();
                chkAdmin.Enabled = false;
                chkAdmin.Checked = false;
                chkStock.Checked = false;
                chkVentas.Checked = false;
                chkVentas.Enabled = false;
                chkStock.Enabled = false;
            }
            else
            {
                if (rbCliente.Checked)
                {
                    cargarListaCliente();
                    chkAdmin.Enabled = false;
                    chkAdmin.Checked = false;
                    chkStock.Checked = false;
                    chkVentas.Checked = false;
                    chkVentas.Enabled = false;
                    chkStock.Enabled = false;
                }
                else
                {
                    cargarListaEmpleado();

                  
                }
            }

            pnlModal_ModalPopupExtender.Show();
            tipoBus = "emp";
        }




        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is RadioButton)
                {
                }
                else
                {
                    if (control is TextBox)
                        ((TextBox)control).Text = string.Empty;
                    else if (control is DropDownList)
                        ((DropDownList)control).ClearSelection();
                    else if (control is CheckBoxList)
                        ((CheckBoxList)control).ClearSelection();
                    else if (control is CheckBox)
                        ((CheckBox)control).Checked = false;
                    else if (control.HasControls())
                        CleanControl(control.Controls);
                }
            }
        }

        

        protected void modoVentana(string modo)
        {
            switch (modo)
            {
                case "nuevo":
                    CleanControl(this.Controls);
                    rbCliente.Enabled = true;
                    rbEmpleado.Enabled = true;
                    break;
                case "busqueda":
                    rbCliente.Enabled = false;
                    rbEmpleado.Enabled = false;
                    break;
           
                
            }
        }
        protected void cargarEmpleado()
        {
            txtApellido.Text = objEmpEditar.Apellido;
            txtCodigo.Text = objEmpEditar.Codigo.ToString();
            txtNombre.Text = objEmpEditar.Nombre;
            txtNroDoc.Text = objEmpEditar.NroDocumento.ToString();
            txtTelefono.Text = objEmpEditar.Telefono;
            cmbTipoDoc.SelectedValue = objEmpEditar.TipoDocumento.ToString();

           

        }
        protected void cargarCliente()
        {
            txtApellido.Text = objCliEditar.ApellidoCliente;
            txtCodigo.Text = objCliEditar.Codigo.ToString();
            txtNombre.Text = objCliEditar.NombreCliente;
            txtNroDoc.Text = objCliEditar.NumeroDocumento.ToString();
            txtTelefono.Text = objCliEditar.Telefono;
            cmbTipoDoc.SelectedValue = objCliEditar.TipoDocumento.ToString();

        }
        protected void onRowSelected(Dictionary<string, string> objReto)
        {
            if (tipoBus == "emp")
            {

                if (!Context.User.IsInRole("ADMIN"))
                {
                    ClienteBCL objCli = new ClienteBCL();
                    objCliEditar = objCli.getByID(int.Parse(objReto["Codigo"].ToString()));
                    ViewState["tipoDoc"] = objReto["EstadoClie"].ToString();
                    ViewState["objEditar"] = objCliEditar;
                    cargarCliente();
                }
                else
                {
                    if (rbCliente.Checked)
                    {
                        ClienteBCL objCli = new ClienteBCL();
                        objCliEditar = objCli.getByID(int.Parse(objReto["Codigo"].ToString()));
                        ViewState["tipoDoc"] = objReto["EstadoClie"].ToString();
                        ViewState["objEditar"] = objCliEditar;
                        cargarCliente();
                    }
                    else
                    {
                        EmpleadoBCL objEmp = new EmpleadoBCL();
                        objEmpEditar = objEmp.getByID(int.Parse(objReto["Codigo"].ToString()));
                        ViewState["tipoDoc"] = objReto["TipoDocumento"].ToString();
                        ViewState["objEditar"] = objEmpEditar;
                        cargarEmpleado();
                    }
                }
            }
            else
            {
                int codigo = int.Parse(objReto["CodigoUsuario"]);
                int? codigoEmpleado = null ;
                int? codigoCliente = null;
                
                if (objReto["CodigoEmpleado"].ToString() != "")
                {
                    codigoEmpleado = int.Parse(objReto["CodigoEmpleado"].ToString());
                }
                if (objReto["CodigoCliente"].ToString() != "")
                {
                    codigoCliente = int.Parse(objReto["CodigoCliente"].ToString());
                }

                ViewState["codigoUsr"] = objReto["CodigoUsuario"];

                cargarUsuario(codigo,codigoEmpleado,codigoCliente);
                txtUsuario.Text = objReto["User"].ToString();

            }


            modoVentana("busqueda");
            ViewState["tipoDoc"] = "";

            
        }


        protected void cargarUsuario(int cod, int? empleado, int? cliente)
        {
            objBC = new UsuarioBCL();
            if (cliente != null)
            {
                ClienteBCL objCli = new ClienteBCL();
                objCliEditar = objCli.getByID((int)cliente);
                cargarCliente();
            }

            if (empleado != null)
            {
                EmpleadoBCL objEmp = new EmpleadoBCL();
                objEmpEditar = objEmp.getByID((int)empleado);

                ViewState["tipoDoc"] = objEmpEditar.TipoDocumento;
                cargarEmpleado();
            }

        }
        protected void cargarListaEmpleado()
        {
            objBC = new UsuarioBCL();
            List<EmpleadoMO> lista = objBC.getEmpBusqueda();

            string[,] mostrar = new string[3, 6];
            mostrar.Initialize();
          
            //CABECERA DE LAS COLUMNAS QUE SE MUESTRAN 

            mostrar[0, 1] = "Apellido";
            mostrar[0, 2] = "Nombre";
            mostrar[0, 5] = "Tipo Documento";
            mostrar[0, 4] = "Nro. Documento";
            //COLUMNAS A MOSTRAR
            mostrar[1, 1] = "1";
            mostrar[1, 2] = "1";
            mostrar[1, 3] = "1";
            mostrar[1, 5] = "1";
         
            //CAMPOS DATAFIELD 
            mostrar[2, 0] = "Codigo";
            mostrar[2, 1] = "Apellido";
            mostrar[2, 2] = "Nombre";
            mostrar[2, 3] = "TipoDocumento";
            mostrar[2, 4] = "NroDocumento";
            mostrar[2, 5] = "estado";



            //**********************************************************************************************************

            usrBusqueda.initi(lista, mostrar, "EmpleadoMO");

        }

       

        protected void cargarListaCliente()
        {
            objBC = new UsuarioBCL();
            List<ClienteMO> lista = objBC.getCliBusquedaRegistrar();

            string[,] mostrar = new string[3, 6];
            mostrar.Initialize();

            //CABECERA DE LAS COLUMNAS QUE SE MUESTRAN 
            
            mostrar[0, 1] = "Apellido";
            mostrar[0, 2] = "Nombre";
            mostrar[0, 5] = "Tipo Documento";
            mostrar[0, 4] = "Nro. Documento";
            //COLUMNAS A MOSTRAR
            mostrar[1, 1] = "1";
            mostrar[1, 2] = "1";
            mostrar[1, 5] = "1";
            mostrar[1, 4] = "1";
            
            //CAMPOS DATAFIELD 
            mostrar[2, 0] = "Codigo";
            mostrar[2, 1] = "ApellidoCliente";
            mostrar[2, 2] = "NombreCliente";
            mostrar[2, 3] = "TipoDocumento";
            mostrar[2, 4] = "NumeroDocumento";
            mostrar[2, 5] = "EstadoClie";



            //**********************************************************************************************************
           
            usrBusqueda.initi(lista, mostrar, "ClienteMO");


        }

        protected void cargarListaUsuario()
        {
            objBC = new UsuarioBCL();
            List<UsuarioMO> lista = objBC.getALL();

            string[,] mostrar = new string[3, 5];
            mostrar.Initialize();

            //CABECERA DE LAS COLUMNAS QUE SE MUESTRAN 



            mostrar[0, 0] = "Codigo";
            mostrar[0, 1] = "Usuario";
            mostrar[0, 2] = "Roles";
            
            //COLUMNAS A MOSTRAR
            mostrar[1, 0] = "1";
            mostrar[1, 1] = "1";
            mostrar[1, 2] = "1";


            //CAMPOS DATAFIELD 
            mostrar[2, 0] = "CodigoUsuario";
            mostrar[2, 1] = "User";            
            mostrar[2, 2] = "Roles";
            mostrar[2, 3] = "CodigoCliente";
            mostrar[2, 4] = "CodigoEmpleado";




            //**********************************************************************************************************

            usrBusqueda.initi(lista, mostrar, "UsuarioMO");


        }


        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            modoVentana("nuevo");
            lblMensaje.Text = "";
            ViewState["objEditar"] = "";
            ViewState["codigoUsr"] = "";
        }

        protected void btnBorrar_Click(object sender, EventArgs e)
        {
            objBC = new UsuarioBCL();
            try
            {

                if (rbCliente.Checked == true)
                {
                    objCliEditar = (ClienteMO)ViewState["objEditar"];
                }
                else
                {
                    objEmpEditar = (EmpleadoMO)ViewState["objEditar"];
                }

                lblMensaje.Text = "Eliminado Correctamente";
                lblMensaje.Visible = true;
                lblMensaje.ForeColor = System.Drawing.Color.Blue;


            }
            catch
            {
                lblMensaje.Text = "Error de Escritura en Base de Datos";
                lblMensaje.Visible = true;
                lblMensaje.ForeColor = System.Drawing.Color.Red;

            }

            
            

        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid == false)
            {
                lblMensaje.Text = "Nombre de usuario Ocupado";
                lblMensaje.Visible = true;
                lblMensaje.ForeColor = System.Drawing.Color.Red;
                return;
            }
            if (ViewState["objEditar"].ToString() == null)
            {
                return; //no tiene nada para guardar!! 
            }


            if (!Context.User.IsInRole("ADMIN"))
            {
                UsuarioMO objUser = new UsuarioMO();
                objUser.User = txtUsuario.Text;
                objUser.Contrasenia = txtPass.Text;
                objUser.Estado = "P"; // estado P significa que debe cambiar la contraseña.

                objUser.Roles = "CLIENTE";
                guardarCliente(objUser);
            }
            else
            {
                if (rbCliente.Checked)
                {
                    UsuarioMO objUser = new UsuarioMO();
                    objUser.User = txtUsuario.Text;
                    objUser.Contrasenia = txtPass.Text;
                    objUser.Estado = "A"; // estado P significa que debe cambiar la contraseña.

                    objUser.Roles = "CLIENTE";
                    guardarCliente(objUser);
                }
                else
                {
                    UsuarioMO objUser = new UsuarioMO();
                    objUser.User = txtUsuario.Text;
                    objUser.Contrasenia = txtPass.Text;
                    objUser.Estado = "A"; // estado P significa que debe cambiar la contraseña.
                    string roles = "";
                    if (chkAdmin.Checked)
                    { roles += "ADMIN,CLIENTE,"; }
                    if (chkStock.Checked)
                    { roles += "STOCK,"; }
                    if (chkVentas.Checked)
                    { roles += ",VENTAS,"; }

                    roles.Remove(roles.LastIndexOf(","));
                    objUser.Roles = roles;
                    guardarEmpleado(objUser);
                }
            }
            
        }



        protected void guardarCliente(UsuarioMO objUser)
        {
            objBC = new UsuarioBCL();
            try
            {
                ClienteMO objClie = (ClienteMO)ViewState["objEditar"];
                objBC.Adicionar(objUser, "cliente",objCliente: objClie);
                modoVentana("nuevo");

                lblMensaje.Text = "Guardado Correctamente";
                lblMensaje.Visible = true;
                lblMensaje.ForeColor = System.Drawing.Color.Blue;

            }
            catch
            {
                lblMensaje.Text = "Error de Escritura en Base de Datos";
                lblMensaje.Visible = true;
                lblMensaje.ForeColor =  System.Drawing.Color.Red;

            }
        }

        protected void guardarEmpleado(UsuarioMO objUser)
        {
            objBC = new UsuarioBCL();
         
            try
            {
                EmpleadoMO objEmp = (EmpleadoMO)ViewState["objEditar"];
                objBC.Adicionar(objUser,"empleado",objEmpleado:objEmp);

                lblMensaje.Text = "Guardado Correctamente";
                lblMensaje.Visible = true;
                lblMensaje.ForeColor = System.Drawing.Color.Blue;

            }
            catch
            {
                lblMensaje.Text = "Error de Escritura en Base de Datos";
                lblMensaje.Visible = true;
                lblMensaje.ForeColor = System.Drawing.Color.Red;

            }
        }

        protected void btnBuscarUser_Click(object sender, EventArgs e)
        {
            cargarListaUsuario();
            pnlModal_ModalPopupExtender.Show();
            tipoBus = "usu";
            lblMensaje.Text = "";
        }

        protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
        {
            objBC = new UsuarioBCL();
            if (objBC.ComprobarDisponibilidad(txtUsuario.Text) != null) 
            {
                args.IsValid = false;
            }
            else
            {
                args.IsValid = true;
            }


        }

  
    }

}